/*
 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/* Set of constants and values used in RoundingAndPropertyTest.java.
 *
 * There are 5 different information in this class:
 * - TestLocale is the locale used by RoundingAndPropertyTest regression test
 *   when calling DecimalFormat.format() on either the set of DecimalGoldenValues
 *   or CurrencyGoldenValues.
 *   See main method of RoundingAndPropertyTest.
 *
 * - FullLocalizationTestLocale is the locale used by RoundingAndPropertyTest
 *   regression test when calling DecimalFormat.format() on the set of values
 *   (DecimalLocalizationValues) used to test that localization of digits
 *   happens correctly when needed.
 *   See main method of RoundingAndPropertyTest.
 *
 * - DecimalLocalizationValues is an array containing all the double values used
 *   to check that localization of digits happens correctly when needed.
 *   See RoundingAndPropertyTest.testLocalizationValues() method.
 *
 * - DecimalGoldenValues and CurrencyGoldenValues are arrays containing all the
 *   double values that will be used as input when checking correctness of
 *   results returned by DecimalFormat.format().
 *   2 arrays are needed since decimal and currency formatting patterns require
 *   a different number of digits after decimal point.
 *   See RoundingAndPropertyTest.testGoldenValues() method.
 *
 * - PROPERTY_CHECK_POSITIVE_VALUE and PROPERTY_CHECK_NEGATIVE_VALUE are the
 *   double values used for testing the validity of the property changes call
 *   in the fast-path case. The locale used in that case is TestLocale.
 *   See RoundingAndPropertyTest.testSettersAndFastPath() method.
 */

import java.util.*;

class GoldenDoubleValues {

    // TestLocale is the testing locale used by RoundingAndPropertyTest test,
    // when testing the golden double values
    static final Locale TestLocale = new Locale("en", "US");


    // FullTestLocale is the testing locale used by RoundingAndPropertyTest test,
    // when testing full localization of double values.
    static final Locale FullLocalizationTestLocale = new Locale("hi", "IN");


    /* Below are the two double values used for exercising the changes of
     * of DecimalFormat properties and symbols. These values are also used
     * as golden values (see golden arrays below).
     */

    /* PROPERTY_CHECK_NEGATIVE_VALUE is the negative double value used for
     * testing the validity of the property changes for fast-path.
     * See testSettersAndFastPath() in RoundingAndPropertyTest test.
     */
    static final double PROPERTY_CHECK_NEGATIVE_VALUE = -2147483646.2334997d;

    /* PROPERTY_CHECK_POSITIVE_VALUE is the positive double value used for
     * testing the validity of the property changes for fast-path.
     * See testSettersAndFastPath() in RoundingAndPropertyTest test.
     */
    static final double PROPERTY_CHECK_POSITIVE_VALUE =  2147483646.2335003d;

    /* --- Array of double values to test localization ------------------------
     *
     * For most locales, effective localization does not happen on digits, i.e.
     * the digits are not changed due to localization. In order to check that
     * fast-path localize correctly digits in such a case, the array of double
     * values below deals with all the case of localization that may happen on
     * digits
     */
    static final double[] DecimalLocalizationValues = {
        1.123,
        12.123,
        123.123,
        1234.123,
        12345.123,
        123456.123,
        1234567.123,
        12345678.123,
        123456789.123,
        1234567890.123,
        1234.0,
        1234.9,
        1234.99,
        1234.999
    };


    /* --- Arrays of golden double values ----------------------------------
     *
     * The   GoldenValues arrays  are used   as input values   for checking the
     * correctness  of  the    DecimalFormat.format()  call  results  done   in
     * RoundingAndPropertyTest regression test. The results are compared to the
     * expected ones  found in  GoldenFormattedValues.  For each value   in the
     * arrays  there  is   a corresponding    expected  string  result   found,
     * represented as an array  of unicode values, at  the same index  in the
     * related GoldenFormattedValues array.  The string returned by  the format
     * call and the found in GoldenFormattedValues array  must be equal for the
     * result to be considered valid.
     * See RoundingAndPropertyTest.testGoldenValues() method.
     *
     * We  need 2  such  GoldenValues  arrays  since the decimal  and  currency
     * formatting rules require different number of digits after decimal point.
     *
     * Thus we have two different arrays of golden values:
     *  - DecimalGoldenValues for the decimal case.
     *  - CurrencyGoldenValues for the currency case.
     *
     * They are associated to related GoldenFormattedValues arrays, generated by
     * running RoundingAndPropertyTest with a "gengold" argument:
     *  - DecimalGoldenFormattedValues for the decimal case.
     *  - CurrencyGoldenFormattedValues for the currency case.
     * These two generated arrays are found in GoldenFormattedValues.java file.
     *
     * The  impact of the formatting rules  is as follows,  because the pattern
     * rule for  the  fractional  part is different   for  decimal and currency
     * patterns:
     *  - in decimal case one must output the first non-zero 3 digits of
     *    fractional part 1.1232 => "1.123" and 1.12016789 => "1.12"
     *  - in currency case the first 2 fractional digits are always output
     *    1.1232 => "1.12" and 1.0016789 => "1.00"
     *
     * Thus we  need a different  number of  fractional digits when  we specify
     * below the golden double values to check, and most of the decimal and
     * currency golden values differ only in the number of fractional digits.
     *
     * The list below exercises almost all code pathes of the fast-path
     * algorithm except localization of digits.
     */

    // --- The set of golden values for the Decimal formatting case --------
    static final double[] DecimalGoldenValues = {
        // Testing of specific values
        +0.0,
        -0.0,
        Double.MIN_VALUE,
        Double.MIN_NORMAL,
        PROPERTY_CHECK_NEGATIVE_VALUE,
        PROPERTY_CHECK_POSITIVE_VALUE,
        -2147483647.9996,
        2147483647.9996,
        -1999999999.9994997,
        1999999999.9995003,
        // Testing fast-path range checks (all outside bounds)
        Double.NaN,
        Double.POSITIVE_INFINITY,
        Double.NEGATIVE_INFINITY,
        Double.MAX_VALUE,
        -9876543210.9876543,
        9876543210.9876543,
        -1234567890.1234567E128,
        1234567890.1234567E128,
        // Testing of integral string size
        1.123,
        12.123,
        123.123,
        1234.123,
        12345.123,
        123456.123,
        1234567.123,
        12345678.123,
        123456789.123,
        1234567890.123,
        -1.123,
        -12.123,
        -123.123,
        -1234.123,
        -12345.123,
        -123456.123,
        -1234567.123,
        -12345678.123,
        -123456789.123,
        -1234567890.123,
        // Testing of fractional string size
        0.1,
        0.12,
        0.123,
        0.1234,
        10.1,
        10.12,
        10.123,
        10.1234,
        100.1,
        100.12,
        100.123,
        100.1234,
        1000.1,
        1000.12,
        1000.123,
        1000.1234,
        10000.1,
        10000.12,
        10000.123,
        10000.1234,
        100000.1,
        100000.12,
        100000.123,
        100000.1234,
        1000000.1,
        1000000.12,
        1000000.123,
        1000000.1234,
        10000000.1,
        10000000.12,
        10000000.123,
        10000000.1234,
        100000000.1,
        100000000.12,
        100000000.123,
        100000000.1234,
        1000000000.1,
        1000000000.12,
        1000000000.123,
        1000000000.1234,
        -0.1,
        -0.12,
        -0.123,
        -0.1234,
        -10.1,
        -10.12,
        -10.123,
        -10.1234,
        -100.1,
        -100.12,
        -100.123,
        -100.1234,
        -1000.1,
        -1000.12,
        -1000.123,
        -1000.1234,
        -10000.1,
        -10000.12,
        -10000.123,
        -10000.1234,
        -100000.1,
        -100000.12,
        -100000.123,
        -100000.1234,
        -1000000.1,
        -1000000.12,
        -1000000.123,
        -1000000.1234,
        -10000000.1,
        -10000000.12,
        -10000000.123,
        -10000000.1234,
        -100000000.1,
        -100000000.12,
        -100000000.123,
        -100000000.1234,
        -1000000000.1,
        -1000000000.12,
        -1000000000.123,
        -1000000000.1234,
        // Testing of special rounding cases
        1.9993,
        12.9993,
        123.9993,
        1234.9993,
        12345.9993,
        123456.9993,
        1234567.9993,
        12345678.9993,
        123456789.9993,
        1234567890.9993,
        1.9996,
        12.9996,
        123.9996,
        1234.9996,
        12345.9996,
        123456.9996,
        1234567.9996,
        12345678.9996,
        123456789.9996,
        1234567890.9996,
        -1.9993,
        -12.9993,
        -123.9993,
        -1234.9993,
        -12345.9993,
        -123456.9993,
        -1234567.9993,
        -12345678.9993,
        -123456789.9993,
        -1234567890.9993,
        -1.9996,
        -12.9996,
        -123.9996,
        -1234.9996,
        -12345.9996,
        -123456.9996,
        -1234567.9996,
        -12345678.9996,
        -123456789.9996,
        -1234567890.9996,
        109.9996,
        1099.9996,
        10999.9996,
        109999.9996,
        1099999.9996,
        10999999.9996,
        109999999.9996,
        1099999999.9996,
        -109.9996,
        -1099.9996,
        -10999.9996,
        -109999.9996,
        -1099999.9996,
        -10999999.9996,
        -109999999.9996,
        -1099999999.9996,
        1.9996,
        19.9996,
        199.9996,
        1999.9996,
        19999.9996,
        199999.9996,
        1999999.9996,
        19999999.9996,
        199999999.9996,
        1999999999.9996,
        -1.9996,
        -19.9996,
        -199.9996,
        -1999.9996,
        -19999.9996,
        -199999.9996,
        -1999999.9996,
        -19999999.9996,
        -199999999.9996,
        -1999999999.9996,
        // Testing for all nines cases
        9.9996,
        99.9996,
        999.9996,
        9999.9996,
        99999.9996,
        999999.9996,
        9999999.9996,
        99999999.9996,
        999999999.9996,
        9.999,
        99.999,
        999.999,
        9999.999,
        99999.999,
        999999.999,
        9999999.999,
        99999999.999,
        999999999.999,
        -9.9996,
        -99.9996,
        -999.9996,
        -9999.9996,
        -99999.9996,
        -999999.9996,
        -9999999.9996,
        -99999999.9996,
        -999999999.9996,
        -9.999,
        -99.999,
        -999.999,
        -9999.999,
        -99999.999,
        -999999.999,
        -9999999.999,
        -99999999.999,
        -999999999.999,
        // Testing for no Fractional part cases
        1.0,
        12.0,
        123.0,
        1234.0,
        12345.0,
        123456.0,
        1234567.0,
        12345678.0,
        123456789.0,
        1234567890.0,
        -1.0,
        -12.0,
        -123.0,
        -1234.0,
        -12345.0,
        -123456.0,
        -1234567.0,
        -12345678.0,
        -123456789.0,
        -1234567890.0,
        // Testing of tricky cases
        -2599.399999990123,
        -2599.339999990123,
        -2599.333999990123,
        1.000099999999818,
        1.000199999999818,
        1.000299999999818,
        1.000399999999818,
        1.000499999999818,
        1.000599999999818,
        1.000699999999818,
        1.000799999999818,
        1.000899999999818,
        1.000999999999818,
        1.2224999999999980,
        1.2224999999999981,
        1.2224999999999982,
        1.2224999999999983,
        1.2224999999999984,
        1.2224999999999985,
        1.2224999999999986,
        1.2224999999999987,
        1.2224999999999988,
        1.2224999999999989,
        1.2224999999999990,
        1.2224999999999991,
        1.2224999999999992,
        1.2224999999999993,
        1.2224999999999994,
        1.2224999999999995,
        1.2224999999999996,
        1.2224999999999997,
        1.2224999999999998,
        // 1.2225 and 1.2224999999999999 have the same double approximation
        1.2225,
        1.2225000000000001,
        1.2225000000000002,
        1.2225000000000003,
        1.2225000000000004,
        1.2225000000000005,
        1.2225000000000006,
        1.2225000000000007,
        1.2225000000000008,
        1.2225000000000009,
        1.2225000000000010,
        1.2225000000000011,
        1.2225000000000012,
        1.2225000000000013,
        1.2225000000000014,
        1.2225000000000015,
        1.2225000000000016,
        1.2225000000000017,
        1.2225000000000018,
        1.2225000000000019,
        // Tricky rounding cases around tie values
        100913.67050000005,
        199999.99895901306,
        251846.3465,
        253243.8825000001,
        365045.85349999997,
        314734.9615,
        541133.9755,
        858372.1225,
        1000999.9995000001,
        1347505.7825,
        3358844.1975,
        9997979.4085,
        9993743.1585,
        9938671.9085,
        3385302.5465,
        3404642.6605,
        3431280.0865,
        3438756.4754999997,
        3446053.7874999996,
        3457917.5125,
        3465393.9014999997,
        3484734.0154999997,
        3492031.3274999997,
        3503895.0525,
        3511371.4414999997,
        3518668.7534999996,
        3530532.4785,
        3538008.8674999997,
        3545306.1794999996,
        3557169.9045,
        3557348.9814999998,
        3564646.2934999997,
        3583986.4074999997,
        3591283.7194999997,
        3603147.4445,
        3610623.8334999997,
        3617921.1454999996,
        3629784.8705,
        3637261.2594999997,
        3656422.2965,
        3656601.3734999998,
        3663898.6854999997,
        3675762.4105,
        3683238.7994999997,
        3690536.1114999996,
        3702399.8365,
        3709876.2254999997,
        3717173.5374999996,
        3729037.2625,
        3736513.6514999997,
        3755853.7654999997,
        3763151.0774999997,
        3775014.8025,
        3782491.1914999997,
        3789788.5034999996,
        3801652.2285,
        3809128.6174999997,
        3816425.9294999996,
        3828289.6545,
        3828468.7314999998,
        3835766.0434999997,
        3855106.1574999997,
        3862403.4694999997,
        3874267.1945,
        3881743.5834999997,
        3889040.8954999996,
        3900904.6205,
        3908381.0094999997,
        3927542.0465,
        3927721.1234999998,
        3935018.4354999997,
        3946882.1605,
        3954358.5494999997,
        3961655.8614999996,
        3973519.5865,
        3980995.9754999997,
        3988293.2874999996,
        4000157.0125,
        4007633.4014999997,
        4026973.5154999997,
        4034270.8274999997,
        4046134.5525,
        4053610.9414999997,
        4060908.2534999996,
        4072771.9785,
        4080248.3674999997,
        4087545.6794999996,
        4099409.4045,
        4099588.4814999998,
        4106885.7934999997,
        4126225.9074999997,
        4133523.2194999997,
        4145386.9445,
        4152863.3334999997,
        4160160.6454999996,
        4172024.3705,
        4179500.7594999997,
        4198661.7965,
        4203407.2865,
        4210704.5985,
        4213435.4975
    };

    // --- The set of golden values for the currency formatting case --------
    static final double[] CurrencyGoldenValues = {
        // Testing of specific values
        +0.0,
        -0.0,
        Double.MIN_VALUE,
        Double.MIN_NORMAL,
        PROPERTY_CHECK_NEGATIVE_VALUE,
        PROPERTY_CHECK_POSITIVE_VALUE,
        -2147483647.996,
        2147483647.996,
        -1999999999.9949997,
        1999999999.9950003,
        // Testing fast-path range checks (all outside bounds)
        Double.NaN,
        Double.POSITIVE_INFINITY,
        Double.NEGATIVE_INFINITY,
        Double.MAX_VALUE,
        -9876543210.9876543,
        9876543210.9876543,
        -1234567890.1234567E128,
        1234567890.1234567E128,
        // Testing of integral string size
        1.12,
        12.12,
        123.12,
        1234.12,
        12345.12,
        123456.12,
        1234567.12,
        12345678.12,
        123456789.12,
        1234567890.12,
        -1.12,
        -12.12,
        -123.12,
        -1234.12,
        -12345.12,
        -123456.12,
        -1234567.12,
        -12345678.12,
        -123456789.12,
        -1234567890.12,
        // Testing of fractional string size
        0.1,
        0.12,
        0.123,
        10.1,
        10.12,
        10.123,
        100.1,
        100.12,
        100.123,
        1000.1,
        1000.12,
        1000.123,
        10000.1,
        10000.12,
        10000.123,
        100000.1,
        100000.12,
        100000.123,
        1000000.1,
        1000000.12,
        1000000.123,
        10000000.1,
        10000000.12,
        10000000.123,
        100000000.1,
        100000000.12,
        100000000.123,
        1000000000.1,
        1000000000.12,
        1000000000.123,
        -0.1,
        -0.12,
        -0.123,
        -10.1,
        -10.12,
        -10.123,
        -100.1,
        -100.12,
        -100.123,
        -1000.1,
        -1000.12,
        -1000.123,
        -10000.1,
        -10000.12,
        -10000.123,
        -100000.1,
        -100000.12,
        -100000.123,
        -1000000.1,
        -1000000.12,
        -1000000.123,
        -10000000.1,
        -10000000.12,
        -10000000.123,
        -100000000.1,
        -100000000.12,
        -100000000.123,
        -1000000000.1,
        -1000000000.12,
        -1000000000.123,
        // Testing of special rounding cases
        1.993,
        12.993,
        123.993,
        1234.993,
        12345.993,
        123456.993,
        1234567.993,
        12345678.993,
        123456789.993,
        1234567890.993,
        1.996,
        12.996,
        123.996,
        1234.996,
        12345.996,
        123456.996,
        1234567.996,
        12345678.996,
        123456789.996,
        1234567890.996,
        -1.993,
        -12.993,
        -123.993,
        -1234.993,
        -12345.993,
        -123456.993,
        -1234567.993,
        -12345678.993,
        -123456789.993,
        -1234567890.993,
        -1.996,
        -12.996,
        -123.996,
        -1234.996,
        -12345.996,
        -123456.996,
        -1234567.996,
        -12345678.996,
        -123456789.996,
        -1234567890.996,
        109.996,
        1099.996,
        10999.996,
        109999.996,
        1099999.996,
        10999999.996,
        109999999.996,
        1099999999.996,
        -109.996,
        -1099.996,
        -10999.996,
        -109999.996,
        -1099999.996,
        -10999999.996,
        -109999999.996,
        -1099999999.996,
        1.996,
        19.996,
        199.996,
        1999.996,
        19999.996,
        199999.996,
        1999999.996,
        19999999.996,
        199999999.996,
        1999999999.996,
        -1.996,
        -19.996,
        -199.996,
        -1999.996,
        -19999.996,
        -199999.996,
        -1999999.996,
        -19999999.996,
        -199999999.996,
        -1999999999.996,
        // Testing of all nines cases
        9.996,
        99.996,
        999.996,
        9999.996,
        99999.996,
        999999.996,
        9999999.996,
        99999999.996,
        999999999.996,
        9.99,
        99.99,
        999.99,
        9999.99,
        99999.99,
        999999.99,
        9999999.99,
        99999999.99,
        999999999.99,
        -9.996,
        -99.996,
        -999.996,
        -9999.996,
        -99999.996,
        -999999.996,
        -9999999.996,
        -99999999.996,
        -999999999.996,
        -9.99,
        -99.99,
        -999.99,
        -9999.99,
        -99999.99,
        -999999.99,
        -9999999.99,
        -99999999.99,
        -999999999.99,
        // Testing of no Fractional part cases
        1.0,
        12.0,
        123.0,
        1234.0,
        12345.0,
        123456.0,
        1234567.0,
        12345678.0,
        123456789.0,
        1234567890.0,
        -1.0,
        -12.0,
        -123.0,
        -1234.0,
        -12345.0,
        -123456.0,
        -1234567.0,
        -12345678.0,
        -123456789.0,
        -1234567890.0,
        // Testing of tricky cases
        -2599.399999990123,
        -2599.339999990123,
        -2599.333999990123,
        1.000999999999818,
        1.001999999999818,
        1.002999999999818,
        1.003999999999818,
        1.004999999999818,
        1.005999999999818,
        1.006999999999818,
        1.007999999999818,
        1.008999999999818,
        1.009999999999818,
        1.224999999999980,
        1.224999999999981,
        1.224999999999982,
        1.224999999999983,
        1.224999999999984,
        1.224999999999985,
        1.224999999999986,
        1.224999999999987,
        1.224999999999988,
        1.224999999999989,
        1.224999999999990,
        1.224999999999991,
        1.224999999999992,
        1.224999999999993,
        1.224999999999994,
        1.224999999999995,
        1.224999999999996,
        1.224999999999997,
        1.224999999999998,
        1.224999999999999,
        1.225,
        1.225000000000001,
        1.225000000000002,
        1.225000000000003,
        1.225000000000004,
        1.225000000000005,
        1.225000000000006,
        1.225000000000007,
        1.225000000000008,
        1.225000000000009,
        1.225000000000010,
        1.225000000000011,
        1.225000000000012,
        1.225000000000013,
        1.225000000000014,
        1.225000000000015,
        1.225000000000016,
        1.225000000000017,
        1.225000000000018,
        1.225000000000019,
        // Tricky rounding cases around tie values
        1009136.7050000005,
        2518463.465,
        2532438.825000001,
        3650458.5349999997,
        3147349.615,
        5411339.755,
        8583721.225,
        13475057.825,
        33588441.975,
        99979794.085,
        99937431.585,
        99386719.085,
        33853025.465,
        34046426.605,
        34312800.865,
        34387564.754999997,
        34460537.874999996,
        34579175.125,
        34653939.014999997,
        34847340.154999997,
        34920313.274999997,
        35038950.525,
        35113714.414999997,
        35186687.534999996,
        35305324.785,
        35380088.674999997,
        35453061.794999996,
        35571699.045,
        35573489.814999998,
        35646462.934999997,
        35839864.074999997,
        35912837.194999997,
        36031474.445,
        36106238.334999997,
        36179211.454999996,
        36297848.705,
        36372612.594999997,
        36564222.965,
        36566013.734999998,
        36638986.854999997,
        36757624.105,
        36832387.994999997,
        36905361.114999996,
        37023998.365,
        37098762.254999997,
        37171735.374999996,
        37290372.625,
        37365136.514999997,
        37558537.654999997,
        37631510.774999997,
        37750148.025,
        37824911.914999997,
        37897885.034999996,
        38016522.285,
        38091286.174999997,
        38164259.294999996,
        38282896.545,
        38284687.314999998,
        38357660.434999997,
        38551061.574999997,
        38624034.694999997,
        38742671.945,
        38817435.834999997,
        38890408.954999996,
        39009046.205,
        39083810.094999997,
        39275420.465,
        39277211.234999998,
        39350184.354999997,
        39468821.605,
        39543585.494999997,
        39616558.614999996,
        39735195.865,
        39809959.754999997,
        39882932.874999996,
        40001570.125,
        40076334.014999997,
        40269735.154999997,
        40342708.274999997,
        40461345.525,
        40536109.414999997,
        40609082.534999996,
        40727719.785,
        40802483.674999997,
        40875456.794999996,
        40994094.045,
        40995884.814999998,
        41068857.934999997,
        41262259.074999997,
        41335232.194999997,
        41453869.445,
        41528633.334999997,
        41601606.454999996,
        41720243.705,
        41795007.594999997,
        41986617.965,
        42034072.865,
        42107045.985,
        42134354.975
    };
}
